---
title: SAIF.Business.Tasks.Claim architecture
summary: Architectural responsibilities, boundaries, and interaction patterns.
status: draft
owner: SAIF Documentation
last_reviewed: 2026-08-21
library: SAIF.Business.Tasks.Claim
reference_type: embedded
---

# SAIF.Business.Tasks.Claim architecture

`SAIF.Business.Tasks.Claim` is a business/domain-layer class library that supplies the concrete task types built on the abstract contract defined by `SAIF.Business.Tasks`. It has no entry point, no UI, and no direct ADO.NET connection handling; it sits between the application layer (`SAIF.Application.Claim`, `SAIF.Application.Claim.Legal`) and the SAIF BOF data portal, and contributes almost no persistence SQL of its own.

## Responsibilities
- Supply the concrete specialization tier over `SAIF.Business.Tasks`: source-system identity (`Claims`, `CoverageB`), claim binding, claim-specific business rules, and presentation-oriented collection shaping (sort, masking, filter echoes).
- Bind claim tasks (`clsClaimTask`, `clsClaimTaskCollection`, `clsMyTaskCollection`) and Coverage B tasks (`clsCoverageBTask`, `clsCoverageBTaskCollection`) to their owning claim via `CLAIM_ID`, enriching each task with human-readable claim attributes obtained either from `clsClaimData` (single-object path) or the Oracle procedure `PK82284_CLAIM_TASK.SELECT_ADDITIONAL_FIELDS` (bulk/list path).
- Provide the read-only `LEGACY_TASK_CODE` lookup pair (`clsLegacyTaskCode`, `clsLegacyTaskCodeCollection`) for task templating metadata.
- Offer `clsClaimTaskGenerator` as a batch/bulk-creation facade so other applications can raise workflow tasks against claims without knowing the underlying task object model.
- Apply access-based confidentiality redaction to "my tasks" retrieval so worker names are hidden from users lacking exposure/conflict/collateral/secure access.

## Component boundaries
- `clsClaimTask` / `clsClaimTaskCollection` / `clsMyTaskCollection`: the claim-task family — `clsClaimTask` binds a task row to `clsClaimData`; `clsClaimTaskCollection` is a plain filtered retrieval; `clsMyTaskCollection` adds per-mailid retrieval, confidentiality masking, and claim-grouped priority sorting.
- `clsCoverageBTask` / `clsCoverageBTaskCollection`: the structurally parallel Coverage B task family — same override set and `Create` → `GetClaimData` → `PostFill` shape as the claim-task family, differing in rules and category-description sourcing.
- `clsClaimTaskGenerator`: a batch-creation facade — not itself persisted despite inheriting `clsBusinessBase`; it wraps a `clsClaimTaskCollection` and forwards `IsValid`, `IsDirty`, `ErrorMessages`, `ErrorCount`, `Save`, `ToXML`, `GetReportXML`.
- `clsLegacyTaskCode` / `clsLegacyTaskCodeCollection`: strictly read-only `LEGACY_TASK_CODE` code-table boundary — write-SQL properties throw `ApplicationException(clsConstants.Messages.InvalidSQLProperty)`.
- Claim-data enrichment boundary: `PostFill` chooses `clsClaimData` when the criteria carries a `ClaimID` (single/new task) and the `PK82284_CLAIM_TASK.SELECT_ADDITIONAL_FIELDS` stored procedure when it does not (list retrieval) — a deliberate performance split.*
- Confidentiality boundary: `clsMyTaskCollection.AfterRetrieve` is the only place in this library that applies access-based data redaction, resolving the four access checks once per retrieval rather than per row.
- `Institutions` typed DataSet: compiled into this assembly but has no referencing code — an apparently misplaced artifact, mirroring the same artifact in `SAIF.Business.Tasks`.*

## Interaction model
- This library never instantiates persistence directly: concrete task types extend `clsTask` / `clsTaskCollection` from [SAIF.Business.Tasks](../saif-business-tasks/overview.md), which owns the `pk82036_task` stored-procedure CRUD path and the dynamic `TASK` search-criteria assembly.
- Claim attribute enrichment is delegated externally to `clsClaimData` and `ClaimServices` (`SAIF.BOF.Business.View.Claim`) — resolved by `ClaimID` for single objects, or via the `PK82284_CLAIM_TASK.SELECT_ADDITIONAL_FIELDS` stored procedure for list retrieval.
- Authorization is programmatic: `ObjectServices.HasResourceAccess`/`HasResourceAccessExternal` gate task-owner (mailid) assignment; `ClaimServices.Has*Access` calls gate confidentiality redaction in `clsMyTaskCollection`; `clsClaimSecurity.RTWAssignedToClaim` gates external RTW-user assignment.
- `clsClaimTaskGenerator` composes multiple `clsClaimTask` creations into a single `clsClaimTaskCollection` and persists them together via one `Save()` call, forwarding to the inherited base collection save path.
- Every business type is `<Serializable()>`, consistent with remoting/session persistence of BOF objects across the web tier.*

## Architecture diagram
The following diagram shows the high-level component boundaries within `SAIF.Business.Tasks.Claim` and their relationship to the base task library, claim data services, and callers.

```mermaid
flowchart TD
	App["Application layer<br>(SAIF.Application.Claim*)"] --> Generator["clsClaimTaskGenerator<br>(batch-creation facade)"]
	Generator --> ClaimTaskColl["clsClaimTaskCollection /<br>clsMyTaskCollection"]
	App --> ClaimTaskColl
	App --> CovBColl["clsCoverageBTaskCollection"]
	ClaimTaskColl --> ClaimTask["clsClaimTask"]
	CovBColl --> CovBTask["clsCoverageBTask"]
	App --> LegacyCodes["clsLegacyTaskCodeCollection<br>(LEGACY_TASK_CODE lookup)"]
	ClaimTask --> BaseTask["clsTask / clsTaskCollection<br>(SAIF.Business.Tasks)"]
	CovBTask --> BaseTask
	ClaimTaskColl --> BaseTask
	CovBColl --> BaseTask
	ClaimTask --> ClaimData["clsClaimData / ClaimServices<br>(SAIF.Business.View.Claim)"]
	CovBTask --> ClaimData
	ClaimTask --> ExtraFields["PK82284_CLAIM_TASK.SELECT_ADDITIONAL_FIELDS<br>(stored procedure)"]
	BaseTask --> DPI["IDataPortalInfo<br>(caller-supplied data portal)"]
```

## Sequence diagram
The following diagram shows the "my tasks" retrieve-and-redact sequence (`clsMyTaskCollection.GetTasks` → `AfterRetrieve`).

```mermaid
sequenceDiagram
	participant Caller as Application layer
	participant MyTasks as clsMyTaskCollection
	participant DPI as IDataPortalInfo
	participant ClaimSvc as ClaimServices
	Caller->>MyTasks: GetTasks(dpi, MyTaskCriteria)
	MyTasks->>DPI: RetrieveObject(criteria)
	DPI-->>MyTasks: result rows
	MyTasks->>ClaimSvc: HasExposureAccess / HasConflictAccess /<br>HasCollateralAccess / HasSecureAccess
	ClaimSvc-->>MyTasks: access flags
	MyTasks->>MyTasks: build clsClaimTask rows,<br>redact WorkerName where unauthorized
	MyTasks-->>Caller: sorted, access-filtered clsMyTaskCollection
```

## Design constraints
- Business objects must never open database connections directly; all persistence flows through the caller-supplied `IDataPortalInfo`, inherited from `SAIF.Business.Tasks`.
- `clsLegacyTaskCode*` code-table objects are strictly read-only — attempting to use their write-SQL properties raises `ApplicationException(clsConstants.Messages.InvalidSQLProperty)`.
- `TASK` create/update/delete is routed exclusively through the inherited `pk82036_task` stored-procedure package; this library adds only the `PK82284_CLAIM_TASK.SELECT_ADDITIONAL_FIELDS` enrichment call.
- The body of `PK82284_CLAIM_TASK.SELECT_ADDITIONAL_FIELDS` is not in this repository, so the claim tables it reads and its error behavior are unknown.**
- `clsClaimTask.Criteria` and `clsCoverageBTask.Criteria` inherit their `IBusinessCriteria` SQL properties from `clsTask.CriteriaBase` rather than declaring their own; only the two `clsLegacyTaskCode*` criteria classes implement `IBusinessCriteria` directly.
- The `Institutions` typed DataSet is compiled into this assembly but has no referencing code — the same misplaced artifact observed in `SAIF.Business.Tasks`.*

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [Database tables](database-tables.md)
- [SQL catalog](sql/index.md)
- [API reference](api/index.md)

> **Note:** Statements marked with * were inferred from code structure, naming conventions, or
> contextual evidence where direct confirmation was not available in source artifacts. Statements
> marked with ** could not be confirmed; treat as unknown until verified.

## Sources
- SAIF.Business.Tasks.Claim/clsClaimTask.vb
- SAIF.Business.Tasks.Claim/clsClaimTaskCollection.vb
- SAIF.Business.Tasks.Claim/clsClaimTaskGenerator.vb
- SAIF.Business.Tasks.Claim/clsCoverageBTask.vb
- SAIF.Business.Tasks.Claim/clsCoverageBTaskCollection.vb
- SAIF.Business.Tasks.Claim/clsLegacyTaskCode.vb
- SAIF.Business.Tasks.Claim/clsLegacyTaskCodeCollection.vb
- SAIF.Business.Tasks.Claim/clsMyTaskCollection.vb
- SAIF.Business.Tasks.Claim/SAIF.Business.Tasks.Claim.vbproj
- SAIF.Business.Tasks.Claim/packages.config
- SAIF.Business.Tasks.Claim/app.config
- SAIF.Business.Tasks.Claim/Web.config
- SAIF.Business.Tasks/SAIF.Business.Tasks.vbproj
